package com.zmc.lostfound.auth.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zmc.lostfound.auth.entity.UserEntity;
import com.zmc.lostfound.auth.vo.*;
import com.zmc.lostfound.common.dto.RoleAndPermissionDTO;
import com.zmc.lostfound.common.dto.post.FromUser;
import com.zmc.lostfound.common.utils.PageParams;
import com.zmc.lostfound.common.utils.PageResult;
import com.zmc.lostfound.common.utils.Result;

import java.util.List;

/**
 * @author ZMC
 * @description 用户信息管理业务接口
 * @email 2869581855@qq.com
 * @date 2023-07-05 15:17:37
 */
public interface UserService extends IService<UserEntity> {

    /**
     * 分页查询用户详情信息
     *
     * @param pageParams 分页查询参数
     * @return PageResult
     */
    PageResult queryPage(PageParams pageParams);

    /**
     * 按用户ids批量查询用户基本信息
     *
     * @param userIds 用户ids
     * @return List<UserBaseInfoVO>
     */
    List<UserBaseInfoVO> queryBaseInfoByIds(List<Long> userIds);

    /**
     * 按用户ids批量查询用户部分信息
     *
     * @param userIds 用户ids
     * @return ist<FromUser>
     */
    List<FromUser> queryPartInfoByIds(List<Long> userIds);

    /**
     * 按id查询用户详情信息
     *
     * @param id 用户id
     * @return UserDetailInfoVO
     */
    UserDetailInfoVO queryDetailInfoById(Long id);

    /**
     * 按id查询用户基本信息
     *
     * @param id 用户id
     * @return UserBaseInfoVO
     */
    UserBaseInfoVO queryBaseInfoById(Long id);

    /**
     * 按id查询用户的角色与权限信息
     *
     * @param id 用户id
     * @return RoleAndPermissionDTO
     */
    RoleAndPermissionDTO queryRoleAndPermissionById(Long id);

    /**
     * 按手机号查询用户详情信息
     *
     * @param phone 手机号
     * @return UserDetailInfoVO
     */
    UserDetailInfoVO queryDetailInfoByPhone(String phone);

    /**
     * 按角色id查询用户基本信息
     *
     * @param roleId 角色id
     * @return List<UserBaseInfoVO>
     */
    List<UserBaseInfoVO> queryBaseInfoByRoleId(Long roleId);

    /**
     * 管理员新增用户基本信息
     *
     * @param userSaveWithAdminVO 用户基本信息新增/修改请求体
     * @return Result
     */
    Result insertUserWithAdmin(UserSaveWithAdminVO userSaveWithAdminVO);

    /**
     * 管理员修改用户基本信息
     *
     * @param userSaveWithAdminVO 用户基本信息新增/修改请求体
     * @return Result
     */
    Result updateUserWithAdmin(UserSaveWithAdminVO userSaveWithAdminVO);

    /**
     * 用户修改基本信息
     *
     * @param userUpdateVO 用户修改基本信息请求体
     * @return Result
     */
    Result updateUser(UserUpdateVO userUpdateVO);

    /**
     * 发送短信验证码
     *
     * @param phone 手机号码
     * @return Result
     */
    Result sendSmsCaptcha(String phone);

    /**
     * 校验手机号验证码是否正确
     *
     * @param phone   手机号
     * @param captcha 验证码
     * @return Result
     */
    Result checkPhoneCaptcha(String phone, String captcha);

    /**
     * 用户更换绑定手机号
     *
     * @param updatePhoneVO 用户更换绑定手机号请求体
     * @return Result
     */
    Result updatePhone(UpdatePhoneVO updatePhoneVO);

    /**
     * 通过短信验证码修改密码
     *
     * @param updatePasswordVO 修改密码请求体
     * @return Result
     */
    Result updatePasswordByCaptcha(UpdatePasswordVO updatePasswordVO);

    /**
     * 发送邮箱验证码
     *
     * @param qqEmail QQ邮箱
     * @return Result
     */
    Result sendEmailCaptcha(String qqEmail);

    /**
     * 校验邮箱验证码是否正确
     *
     * @param qqEmail QQ邮箱
     * @param captcha 验证码
     * @return Result
     */
    Result checkEmailCaptcha(String qqEmail, String captcha);

    /**
     * 用户更换绑定邮箱
     *
     * @param updateEmailVO 用户更换绑定邮箱请求体
     * @return Result
     */
    Result updateEmail(UpdateEmailVO updateEmailVO);

    /**
     * 插入默认用户信息
     *
     * @param phone    手机号
     * @param password 登录密码
     * @param roleCode 角色码
     * @return UserDetailInfoVO
     */
    UserDetailInfoVO insertDefaultUser(String phone, String password, String roleCode);

    /**
     * 短信验证码注册
     *
     * @param phoneCaptchaRegisterVO 短信验证码注册请求体
     * @return Result
     */
    Result phoneCaptchaRegister(PhoneCaptchaRegisterVO phoneCaptchaRegisterVO);

    /**
     * 短信验证码登录
     *
     * @param phoneCaptchaLoginVO 短信验证码登录请求体
     * @return Result
     */
    Result phoneCaptchaLogin(PhoneCaptchaLoginVO phoneCaptchaLoginVO);

    /**
     * 手机号密码登录
     *
     * @param phonePasswordLoginVO 手机号密码登录请求体
     * @return Result
     */
    Result phonePasswordLogin(PhonePasswordLoginVO phonePasswordLoginVO);

    /**
     * 账号封禁
     *
     * @param userDisableVO 账号封禁/解封请求体
     * @return Result
     */
    Result disable(UserDisableVO userDisableVO);

    /**
     * 账号解封
     *
     * @param userDisableVO 账号封禁/解封请求体
     * @return Result
     */
    Result untieDisable(UserDisableVO userDisableVO);

}

